前一天完成了 TTS,讓 AI 可以把文字轉成語音。
但目前使用的還是模型內建的固定聲線。
今天想進一步測試:
如果只提供一小段真人錄音,AI 能不能用相似的聲音說出新的內容?
這就是今天要做的 Voice Cloning。
Voice Cloning 是讓模型根據一段參考音訊,模仿其中的聲音特徵,再生成新的語音內容。
流程大致是:
參考真人錄音
+
新的輸入文字
↓
Voice Cloning Model
↓
新的語音
↓
Playback
和一般 TTS 最大的差別在於:
一般 TTS
→ 使用模型既有聲線
Voice Cloning
→ 根據參考音訊模仿指定聲線
在高齡陪伴情境中,聲音除了傳遞內容,也可能影響互動的熟悉感。
例如一般聊天可以使用低延遲的固定聲線,但特定情境下,也可以使用經授權的家人聲線來播放問候或提醒。
因此目前規劃是:
一般聊天
→ Kokoro 82M
需要熟悉聲線的內容
→ Voice Cloning
Voice Cloning 並不取代一般 TTS,而是作為另一種語音輸出方式。
這次實作流程:
真人參考音訊
+
輸入新的文字
↓
Voice Cloning
↓
產生新的 WAV
↓
Playback
測試時,參考音訊中的內容和最後生成的句子不同。
例如參考音訊說:
你好,今天過得還好嗎?
但生成:
記得今天要多喝一點水喔。
這樣才能確認模型是在模仿聲線,而不是單純重播原始錄音。
Voice Cloning 的效果很大程度受到參考音訊影響。
因此這次分別測試:
5 秒
10 秒
20 秒
觀察參考音訊變長之後,聲線相似度和自然度是否有明顯差異。
參考音訊除了長度之外,也需要注意:
如果參考音訊本身品質不好,即使模型能力很強,生成結果也可能受到影響。
這次主要觀察兩個面向:
生成的語音聽起來是否自然。
例如:
生成聲音和原始參考聲音有多像。
這兩個指標需要分開看。
一段語音可能非常自然,但不像原本的說話者;也可能聲線很接近,但整體語氣比較不自然。
Day 03 使用 Kokoro 82M,主要優點是速度快。
Voice Cloning 則需要額外處理參考音訊,因此計算量通常更高。
可以簡單理解成:
Kokoro
→ 固定聲線
→ 低延遲
→ 適合一般即時聊天
Voice Cloning
→ 指定聲線
→ 計算量較高
→ 適合需要熟悉聲音的情境
因此目前不打算讓所有 AI 回覆都使用 Voice Cloning。
今天除了聲音效果,也會記錄:
Model Load Time
Inference Time
Audio Duration
RTF
Reference Audio Length
並比較不同參考音訊長度的結果。
這樣之後就可以決定:
需要多少秒的參考音訊,才能在速度和聲音相似度之間取得比較好的平衡。
目前 Voice Cloning 最大的取捨是:
自然度
vs.
聲線相似度
vs.
生成速度
參考音訊變長,不代表結果一定會一直變好。
而模型越大,也不一定適合直接放進即時聊天 Pipeline。
所以 Voice Cloning 在 AI Companion 裡比較適合被當成一個「特定情境能力」,而不是取代所有 TTS。
到目前為止:
Day 02
語音 → STT → 文字
Day 03
文字 → TTS → 語音
Day 04
參考聲音 + 文字
→ Voice Cloning
→ 指定聲線語音
接下來就是把前面完成的模組真正串起來:
使用者說話
↓
STT
↓
LLM
↓
TTS
↓
AI 回答
Day 05 準備完成第一版完整的 Conversation Pipeline。